/**********************************************************
 * File description:SqliteDriver.h
 * Function:数据库驱动类
 * Current Version: 1.0.0
 * Author: 夏新宇
 * Date: 2022-09-26
 *  -----
 *  Copyright by BoKun Software.
 **********************************************************/
#ifndef SQLITDRIVER_H
#define SQLITDRIVER_H

#include <QDir>
#include <QDate>
#include <QDateTime>
#include <QFileInfo>
#include <QString>
#include <QTime>
#include <QSqlDatabase>
#include <QSqlRecord>
#include <QSqlQuery>
#include <QVariant>
#include <QDebug>

class SqliteDriver
{
public:
    SqliteDriver();
    ~SqliteDriver();
public:
    bool setDBDir(QString dirPath);//设置数据库存放路径
    bool createDB(QString dbName);//创建数据库
    bool openDB(QString dbName);//打开数据库，创建连接
    bool closeDB();//执行crud之后要关闭连接，不要占用资源

    bool queryExec(QString dbName,QString sqlStr);//执行sql语句，不获取结果
    bool queryExec(QString dbName,QString sqlStr,QList<QHash<QString,QString>> &data);//执行sql语句，并获取结果
    bool getData(QString dbName,QString tableName,QHash<QString,QString> &data,QString sqlWhere=""); //获取单条数据
    bool getData(QString dbName,QString tableName,QList<QHash<QString,QString>> &data,QString sqlWhere=""); //获取多条数据
    bool getData(QString dbName,QString tableName,QHash<QString,QString> columndata,QList<QHash<QString,QString>> &data,QString sqlWhere=""); //获取指定列多条数据
    bool addData(QString dbName,QString tableName,QHash<QString,QString> data);//增加操作
    bool delData(QString dbName,QString tableName,QString sqlWhere);//删除操作
    bool updateData(QString dbName,QString tableName,QHash<QString,QString> data,QString sqlWhere="");//修改操作

    //函数重载，创建数据库连接后，参数不用传递dbName
    bool queryExec(QString sqlStr);//执行sql语句，不获取结果
    bool queryExec(QString sqlStr,QList<QHash<QString,QString>> &data);//执行sql语句，并获取结果
    bool getData(QString tableName,QHash<QString,QString> &data,QString sqlWhere=""); //获取单条数据
    bool getData(QString tableName,QList<QHash<QString,QString>> &data,QString sqlWhere=""); //获取多条数据
    bool getData(QString tableName,QHash<QString,QString> columndata,QList<QHash<QString,QString>> &data,QString sqlWhere=""); //获取指定列多条数据
    bool addData(QString tableName,QHash<QString,QString> data);//增加操作
    bool delData(QString tableName,QString sqlWhere);//删除操作
    bool updateData(QString tableName,QHash<QString,QString> data,QString sqlWhere="");//修改操作
    bool transaction();
    bool commit();
    QString getErrorSql();//获取错误的数据库语句
private:
    QSqlDatabase db;
    QString dbFilePath;//数据库路径
    QString dbDir; //数据库文件夹
    QString databaseName;//数据库名字
    QString errorSqlText;//错误语句
private:
    void errorSql(QString sql);//错误打印
};

#endif // SQLITDRIVER_H
